//#include<iostream>
//#include<list>
//#include<string>
//#include<assert.h>
//using namespace std;
//
//#include <iostream>
//#include <cstring>
//
//namespace bit
//{
//    class string
//    {
//    public:
//        typedef char* iterator;
//
//        string(const char* str = "")
//            : _str(nullptr), _size(strlen(str)), _capacity(_size)
//        {
//            cout << "string(char* str)" << endl;
//
//            _str = new char[_capacity + 1];
//            strcpy(_str, str);
//        }
//
//        ~string()
//        {
//            delete[] _str;
//            _str = nullptr;
//        }
//
//        iterator begin()
//        {
//            return _str;
//        }
//
//        iterator end()
//        {
//            return _str + _size;
//        }
//
//        void swap(string& s)
//        {
//            using std::swap;
//            swap(_str, s._str);
//            swap(_size, s._size);
//            swap(_capacity, s._capacity);
//        }
//
//        // 拷贝构造
//        string(const string& s)
//            : _str(nullptr), _size(s._size), _capacity(s._size)
//        {
//            cout << "string(const string& s) -- 深拷贝" << endl;
//            _str = new char[_capacity + 1];
//            strcpy(_str, s._str);
//        }
//
//        // 移动构造
//        string(string&& s) noexcept
//            : _str(s._str), _size(s._size), _capacity(s._capacity)
//        {
//            cout << "string(string&& s) -- 移动拷贝" << endl;
//            s._str = nullptr;
//            s._size = 0;
//            s._capacity = 0;
//        }
//
//        // 赋值重载
//        string& operator=(const string& s)
//        {
//            cout << "string& operator=(const string& s) -- 深拷贝" << endl;
//            if (this != &s)
//            {
//                string tmp(s);
//                swap(tmp);
//            }
//            return *this;
//        }
//
//        // 移动赋值
//        string& operator=(string&& s) noexcept
//        {
//            cout << "string& operator=(string&& s) -- 移动赋值" << endl;
//            swap(s);
//            return *this;
//        }
//
//        char& operator[](size_t pos)
//        {
//            assert(pos < _size);
//            return _str[pos];
//        }
//
//        void reserve(size_t n)
//        {
//            if (n > _capacity)
//            {
//                char* tmp = new char[n + 1];
//                strcpy(tmp, _str);
//                delete[] _str;
//                _str = tmp;
//
//                _capacity = n;
//            }
//        }
//
//        void push_back(char ch)
//        {
//            if (_size >= _capacity)
//            {
//                size_t newcapacity = (_capacity == 0) ? 4 : _capacity * 2;
//                reserve(newcapacity);
//            }
//
//            _str[_size] = ch;
//            ++_size;
//            _str[_size] = '\0';
//        }
//
//        // string operator+=(char ch)
//        string& operator+=(char ch)
//        {
//            push_back(ch);
//            return *this;
//        }
//
//        string operator+(char ch)
//        {
//            string tmp(*this);
//            tmp.push_back(ch);
//            return tmp;
//        }
//
//        const char* c_str() const
//        {
//            return _str;
//        }
//
//    private:
//        char* _str;
//        size_t _size;
//        size_t _capacity; // 不包含最后的'\0'
//    };
//
//    // 将整数转换为字符串
//    string to_string(int value)
//    {
//        bool flag = value < 0;
//        if (flag)
//        {
//            value = -value;
//        }
//
//        string str;
//        do
//        {
//            int x = value % 10;
//            value /= 10;
//
//            str.push_back('0' + x);
//        } while (value > 0);
//
//        if (flag)
//        {
//            str.push_back('-');
//        }
//
//        std::reverse(str.begin(), str.end());
//        return str;
//    }
//}
//
//// 示例函数模板
//template <class T>
//void PrintArg(T t)
//{
//    std::cout << t << " ";
//}
//
//// 展开函数
//template <class ...Args>
//void ShowList(Args... args)
//{
//    (PrintArg(args), ...);
//    std::cout << std::endl;
//}
//
//// 示例主函数
//int main()
//{
//    bit::string s1 = bit::to_string(1234);
//    std::cout << s1.c_str() << std::endl;
//
//    ShowList(1, 'A', std::string("sort"));
//
//    return 0;
//}
//
////int main()
////{
////	bit::string s1;
////	s1 = bit::to_string(1234);
////
////	//bit::string("hello world");
////	//const bit::string& ref1 = bit::string("hello world");
////	//bit::string s2;
////
////	//const bit::string& ref2 = bit::to_string(1234);
////	//cout << "111111111111111111" << endl;
////
////	/*const bit::string& ref2 = bit::to_string(1234);
////	cout << "111111111111111111" << endl;*/
////
////	return 0;
////}
//
//
//
////class Person
////{
////public:
////	Person(const char* name = "", int age = 0)
////		:_name(name)
////		, _age(age)
////	{}
////	Person(const Person& p)
////		:_name(p._name)
////		, _age(p._age)
////	{}
////	Person(Person&& p) = default;
////private:
////	bit::string _name;
////	int _age;
////};
////int main()
////{
////	Person s1;
////	Person s2 = s1;
////	Person s3 = std::move(s1);
////	return 0;
////}
//
//
//
//
////class Person
////{
////public:
////	Person(const char* name = "", int age = 0)
////		:_name(name)
////		, _age(age)
////	{}
////
////	Person(const Person& p)
////		:_name(p._name)
////		, _age(p._age)
////	{}
////
////	Person& operator=(const Person& p)
////	{
////		if (this != &p)
////		{
////			_name = p._name;
////			_age = p._age;
////		}
////		return *this;
////	}
////
////	// 强制生成移动构造和移动赋值
////	Person(Person&& p) = default;
////	Person& operator=(Person&& p) = default;
////
////	~Person()
////	{
////		cout << "~Person()" << endl;
////	}
////
////private:
////	bit::string _name; // 自定义类型
////	int _age = 1;		   // 内置类型
////};
////
////int main()
////{
////	Person s1("张三", 18);
////	Person s2 = s1;
////	Person s3 = std::move(s1);
////	//cout << endl << endl;
////	Person s4;
////	s4 = std::move(s2);
////
////	return 0;
////}
//
//
//
//template <class T>
//void PrintArg(T t)
//{
//    cout << t << " ";
//}
////展开函数
//template <class ...Args>
//void ShowList(Args... args)
//{
//    int arr[] = { (PrintArg(args), 0)... };
//    cout << endl;
//}
////int main()
////{
////	ShowList(1);
////	ShowList(1, 'A');
////	ShowList(1, 'A', std::string("sort"));
////	return 0;
////}